package net.wangy.basiccode1.finalandneibunei;

/**
 * 1、什么是内部类：
 * 将一个类A定义在另一个类B里面，里面的那个类A就称为内部类，B则称为外部类
 * 就好像一个事物里面包含了另一个事物，比如身体和心脏，汽车和发动机。（我们要记得类就是用来模拟事物的）
 * 2、内部类分类：
 *     成员内部类
 *     局部内部类（包含匿名内部类）
 * 3、成员内部类：
 *      定义格式：
 *      修饰符 class 外部类名称{
 *          修饰符 class 内部类名称{
 *              //...
 *          }
 *          //...
 *      }
 *      注意：成员内部类中，内用外，随意访问；但是外部类用内部类的，一定得借助内部类的实例对象
 *      ===========================================================================
 *      如何使用成员内部类呢？两种方法：
 *      1.直接方式，在外部类的成员方法中使用内部类，然后再main方法中去调用外部类的成员方法
 *      2.直接new一个成员内部类来使用，不过有公式：
 *      【外部类名称.内部类名称 对象名=new 外部类名称().new 内部类名称();】
 *      内部类和外部类如果出现了元素重名的现象，那么内部类访问外部类元素格式是：外部类名称.this.外部成员变量名
 * 4、局部内部类：
 *      局部内部类定义：
 *        如果一个类定义在一个方法内部，那么这个类就是局部内部类。局部内部类的特点就好比局部变量，在此方法内部
 *        可以使用，一旦出了这个方法就不能使用了。
 *      局部内部类定义格式：
 *          修饰符 class 外部类名称{
 *              修饰符 返回值类型 外部类方法名称(){
 *                  class 局部内部类名称 {
 *                      //...
 *                  }
 *              }
 *              //...
 *          }
 *
 * 5、类的权限修饰符小结：
 * public>protected>(default)>private
 * 定义一个类时权限修饰符的规则：
 * 1.外部类(修饰符可以是)：public/default
 * 2.成员内部类：public protected (default) private(意为私有的，本类中)
 * 3.局部内部类：什么都不写，也不是default
 *
 * 6、局部内部类的final问题：
 *  局部内部类如果希望访问所在方法中的局部变量，那么这个变量必须是有效final的。（不会改变的）
 *
 * 7、匿名内部类：【重要概念】
 *  如果接口的实现类（或者是父类的子类）只需要使用唯一的一次，那么这种情况下就要省略掉该实现类或子类的
 *  定义，改为使用【匿名内部类】。匿名内部类就是某个接口或者抽象类的实现类，覆盖重写了接口或者抽象类中的
 *  抽象方法，并且创建了对象，所以可以直接使用，或者以多态形式使用。
 *
 *  匿名内部类定义格式：
 *      接口名称 对象名=new 接口名称() {
 *          //覆盖重写抽象方法...
 *      }
 *
 *  对匿名内部类格式解释：
 *      对格式“new 接口名称() {....}”进行解析：
 *      1.new代表创建对象的动作。
 *      2.接口名称就是匿名内部类需要实现的哪个接口。
 *      3.{....}才是匿名内部类的内容。
 *  另外要注意的是：
 *      1.匿名内部类在创建的时候只能使用唯一一次。
 *      2.匿名对象在调用方法的时候，只能使用唯一一次。
 *      3.匿名内部类是省略了【实现类/子类】，但是匿名对象却是省略了对象名称。
 *
 *  接口和类都是可以作为成员变量的，也可以作为参数和返回值。
 */
public class AboutNeibuleiOne {

}
